package cn.wolfcode.trip.base.service.impl;

import cn.wolfcode.trip.base.domain.MyMessageRelation;
import cn.wolfcode.trip.base.domain.Praise;
import cn.wolfcode.trip.base.mapper.MyMessageRelationMapper;
import cn.wolfcode.trip.base.mapper.PraiseMapper;
import cn.wolfcode.trip.base.query.CommentQueryObject;
import cn.wolfcode.trip.base.query.QueryObject;
import cn.wolfcode.trip.base.service.IPraiseService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;


@Service
public class PraiseServiceImpl implements IPraiseService {

    @Autowired
    private PraiseMapper praiseMapper;
    @Autowired
    private MyMessageRelationMapper myMessageRelationMapper;

    public String saveOrCancel(Praise p) {
        //创建一个我的消息的对象
        MyMessageRelation mmr = new MyMessageRelation();

        //点赞成功的话就在我的消息那边新增一条记录,先设置一些默认的值
        mmr.setCurrentuser(p.getUser());//设置当前点赞的用户
        mmr.setMessagetype(MyMessageRelation.MESSAGETYPE_IN_LIKE);//设置类型为点赞

        //设置一些可以有的默认值
        p.setCreatTime(new Date());//点赞日期
        p.setTotal(1);//点赞时间
        //先判断这次是点赞游记还是点赞点评
        if(p.getTravel()!=null){
            //点赞的时候，拿到当前被点赞的游记去数据库中查，看有没有点过赞
            List<Praise> praises = praiseMapper.checkCopyLikeByTravel(p.getTravel().getId());
            //判断这篇游记在数据库中有没有被赞评过
            if(praises.size()==0){
                //如果没有记录的话就证明这篇游记没有被赞过
                praiseMapper.insertlikeTravel(p);
                mmr.setTravel(p.getTravel());//设置当前被点赞的游记
                myMessageRelationMapper.insertLikeTravel(mmr);
                return "点赞成功" ;
            }else{
                //如果有数据的话就循环判断当前记录的用户是否这次点赞的用户
                for (int i = 0; i < praises.size(); i++) {
                    //循环遍历数据
                    if(praises.get(i).getUser().getId()==p.getUser().getId()){
                        //如果说遍历到当前用户的话就将点赞取消掉
                        praiseMapper.deleteByPrimaryKey(praises.get(i).getId());
                        //如果是取消点赞的话就把我的消息中的该用户点赞的记录也删掉
                        myMessageRelationMapper.deleteLikeMessageByUserIdAndTravelId(
                                p.getUser().getId(),p.getTravel().getId(),MyMessageRelation.MESSAGETYPE_IN_LIKE);
                        return "取消点赞啦" ;
                    }else {
                        //如果说当前记录的用户和点赞的用户不相等，也不要立刻加记录，要遍历到最后一次也不相等的话才加记录
                        if(i+1==praises.size()){
                            praiseMapper.insertlikeTravel(p);
                            mmr.setTravel(p.getTravel());//设置当前被点赞的游记
                            myMessageRelationMapper.insertLikeTravel(mmr);//在我的消息那边增加消息
                            return "点赞成功" ;
                        }
                    }
                }
            }
        }else if(p.getStrategycomment()!=null){
            //这边就是点赞点评的,逻辑基本上和上面一样
            List<Praise> praises = praiseMapper.checkCopyLikeByStrategyComment(p.getStrategycomment().getId());
            if(praises.size()==0){
                //如果没有记录的话就证明这个点评没有被赞过
                praiseMapper.insertlikeStrategyComment(p);
                return "点赞成功" ;
            }else{
                //如果有数据的话就循环判断当前记录的用户是否这次点赞的用户
                for (int i = 0; i < praises.size(); i++) {
                    //循环遍历数据
                    if(praises.get(i).getUser().getId()==p.getUser().getId()){
                        //如果说遍历到当前用户的话就将点赞取消掉
                        praiseMapper.deleteByPrimaryKey(praises.get(i).getId());
                        return "取消点赞啦" ;
                    }else {
                        //如果说当前记录的用户和点赞的用户不相等，也不要立刻加记录，要遍历到最后一次也不相等的话才加记录
                        if(i+1==praises.size()){
                            praiseMapper.insertlikeStrategyComment(p);
                            return "点赞成功" ;
                        }
                    }
                }
            }
        }
        return "你点个毛线赞，识别不了！！！！" ;
    }



    public PageInfo query(QueryObject queryObject) {
        return null;
    }

    @Override
    public Integer getPraiseTotal(CommentQueryObject qo) {
        return praiseMapper.selectPraiseTotalByStrategyCommentId(qo);
    }

    @Override
    public Integer getPraisesByUserId(Long id) {
        return praiseMapper.selectLikeTotalByUserId(id);
    }
}
